package com.facade;

import java.io.Serializable;
import java.util.List;

import com.dao.ItemVendaDao;
import com.dao.ProdutoDao;
import com.model.Produto;

public class ProdutoFacade implements Serializable {
	private static final long serialVersionUID = 1L;
	
	private ProdutoDao produtoDao = new ProdutoDao();

	public void createProduto(Produto produto) {
		produtoDao.beginTransaction();
		produtoDao.save(produto);
		produtoDao.commitAndCloseTransaction();
	}

	public void updateProduto(Produto produto) {
		produtoDao.beginTransaction();
		try {
			produtoDao.update(produto);
			produtoDao.commit();
		} catch (Exception e) {
			produtoDao.rollback();
		} finally {
			produtoDao.closeTransaction();
		}
	}
	
	public void deleteProduto(Produto produto){
		produtoDao.beginTransaction();
		Produto produtoAux = produtoDao.findReferenceOnly(produto.getIdProduto());
		produtoDao.delete(produtoAux);
		produtoDao.commitAndCloseTransaction();	
	}
	
	public void deleteProdutoItem(Produto produto){
		produtoDao.beginTransaction();
		ItemVendaDao itemVendaDao = new ItemVendaDao();
		itemVendaDao.joinTransaction();
		
		Produto produtoAux = produtoDao.findReferenceOnly(produto.getIdProduto());
		produtoDao.delete(produtoAux);
		produtoDao.commitAndCloseTransaction();		
	}

	public Produto findProduto(int produtoId) {
		produtoDao.beginTransaction();
		Produto produto = produtoDao.find(produtoId);
		produtoDao.closeTransaction();
		return produto;
	}
	
	public Produto findByPrimaryKey(Produto produto) {
		produtoDao.beginTransaction();
		Produto produtoAux = produtoDao.findByPrimaryKey(produto);
		produtoDao.closeTransaction();
		return produtoAux;
	}

	public List<Produto> listAll() {
		produtoDao.beginTransaction();
		List<Produto> result = produtoDao.findAll();
		produtoDao.closeTransaction();

		return result;
	}


}